from typing import List, IO

from llama_index.core.schema import Document
from llama_index.readers.file import PDFReader

from ..data_parser_interface import DataParserInterface


class PdfParser(DataParserInterface):
    """
    一个专门用于解析 PDF 文件的解析器。
    它封装了 LlamaIndex 的 PDFReader，实现了我们的标准接口。
    """

    def parse(self, file: IO[bytes], **kwargs) -> List[Document]:
        """
        从 PDF 文件的二进制流中解析出 Document 对象。

        Args:
            file (IO[bytes]): 一个以二进制模式打开的 PDF 文件流。
            **kwargs: 可能会传递给底层 LlamaIndex Reader 的额外参数。

        Returns:
            List[Document]: 解析出的 Document 对象列表。
        """
        # 创建一个 LlamaIndex 的 PDFReader 实例
        # 注意：LlamaIndex 的 readers 通常是无状态的，所以可以在方法内创建
        reader = PDFReader()
        
        # 调用其 load_data 方法来执行解析
        # 这个方法接受一个 file-like 对象
        return reader.load_data(file, **kwargs) 